1. Field of the Invention
The present invention relates generally to an improved data processing system and in particular to a computer implemented method and apparatus for processing data. Still more particularly, the present invention relates to a computer implemented method, apparatus, and computer usable program code for delegating activities in service oriented architectures using continuation passing style programming techniques.
2. Description of the Related Art
Managing large distributed computing systems, such as a large network maintained by a large business, can be daunting. The large number of data processing systems connected to the network means that managing the network, the individual data processing systems on the network, and the myriad programs on those data processing systems is very difficult. In addition, even large businesses may call upon the services of an external distributed computing system to handle overflow work or to perform certain management tasks on the home distributed computing system. Managing tasks between multiple distributed computing systems further increases the difficulty of managing networks and performing tasks in these environments. A method of managing tasks and data processing systems in these environments is to use service oriented architectures.
Service oriented architectures have two key elements, including the fact that units of functionality are expressed via a service interface which hides the implementations of those functions and the fact that applications are built by combining services in some way. For the latter element, the term “combining” could mean calling several services sequentially, or using the results of one service to build the arguments for another service call, or any other service or service invocation. Service oriented architectures are characterized by the use of service invocations as the basic building block for distributed systems, whether those systems are loosely coupled or tightly coupled. A service invocation is a call for a service to be performed. Examples of service invocations include simple service invocations, such as instructions to get the current time in UTC; or service invocations to, given a metric unit of measure, produce the equivalent English system of measure. Other examples of service invocations include more complex service invocations, such as instructions to, given an item number, produce the quantity of that item which is stocked in a warehouse or retail store; or instructions to, given a list of items and a customer account number, place an order with a retail enterprise for those items on behalf of the referenced customer.
The service invocation may be made by the customer and performed by the provider's distributed computing system or the customer's distributed computing system. A service invocation may also be invoked by any other user. Thus, some service oriented architectures exist wholly within an enterprise intranet, or even within a single department at a business, while other service oriented architectures span many networks.
When applications are designed for service oriented architectures, a frequent need arises to delegate a service invocation to a third party. Without delegation, a caller, or a first party, wishes to invoke a service provided by a service provider, or a second party. When a service invocation is delegated to a third party, then the third party invokes the service provided by the second party on behalf of the caller. Thus, delegation is a form of job submission. A manager, or third party, is software or data processing systems to which the service invocations are delegated. The manager provides for quality of service, such as dealing with errors, and may provide a “fan-out” and a “fan-in” capability. A fan-out capability means that the manager can iterate a single service invocation across a number of data processing systems and even a number of providers. A fan-in capability means that the manager can collect results from one or more service invocations performed on one or more data processing systems and even across a number of providers.
A known partial solution for managing large networks and performing delegation of service invocations in service oriented architectures is to use scripts, written in a variety of scripting languages, to perform jobs. A script is a program, usually relatively short, written in any one of a number of programming languages. A job is a task and may be a service invocation. An example of a job is to update software on a data processing system. (The term “job” also retains a historical connotation in computing associated with batch processing.) Thus, scripting languages may be used to specify a pattern of service invocation jobs. However, scripting languages address neither a single delegation of a service invocation, nor uncoupled parallelism in the distribution of service invocations and the collection of results of service invocations.
Another class of partial solutions is the use of workflow languages to manage a large network and the individual data processing systems connected to the network. These tasks may be performed as a result of a service invocation. Workflow programs provide instrumentation and control of service invocations, but like scripting languages, do not provide for uncoupled parallelism in the distribution of service invocations and the collection of results of service invocations.
Furthermore, these and other existing approaches to delegation of service invocations are designed on an ad-hoc basis and are not based on a sound computational model that relates the concept of a service invocation to the concept of delegation. No known method is able to: (1) specify a unit of computation for delegation which is larger than a single service invocation, and which may also be a combination of service invocations; (2) delegate multiple service invocations or combinations thereof in order to obtain both quality of service and fan-out and fan-in behavior; (3) instrument a manager in order to measure progress or performance of the execution of multiple service invocations or combinations thereof; (4) control the execution of multiple service invocations or combinations thereof by selectively pausing, resuming, or canceling one or more of the service invocation combinations; and (5) migrate one or more executing combinations of service invocations to a different manager. Thus, an improved computer implemented method, apparatus, and computer usable program code has been developed to perform delegation of multiple service invocations or combinations thereof in service oriented architectures.